home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: vmsnet.sources.games
- Path: uunet!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!mary.fordham.edu!areid
- From: areid@mary.fordham.edu (Darin Reid)
- Subject: Qix.02 -- arcade based game
- Organization: Fordham University
- Message-ID: <25FEB199218570687@mary.fordham.edu>
- News-Software: VAX/VMS VNEWS 1.41
- Sender: news@ctr.columbia.edu (The Daily Lose)
- Date: Tue, 25 Feb 1992 22:57:00 GMT
-
- -+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+
- X 'q' : Y := Y + 1;
- X end;
- X End `7B case `7D;
- X Last_X := Tmp_X;
- X LAst_Y := Tmp_Y;
- Xend `7B Move_Anti_Clockwise`7D;
- X
- X
- X
- XProcedure Move_Clockwise(Var X,Y,Last_X,Last_Y:INteger);
- X
- XVar Tmp_X,Tmp_Y : Integer;
- X
- XBegin
- XTmp_X := X;
- XTmp_Y := Y;
- XCase ( Last_Y-Y) Of`20
- X 1 : Case Screen`5BX,Y`5D.Sym Of`20
- X 'l' : X := X + 1;
- X 'w' : Y := Y - 1;
- X 't' : X := X - 1;
- X 'n' : X := X - 1;
- X 'm' : X := X - 1;
- X 'v' : X := X - 1;
- X 'q' : Y := Y - 1;
- X end;
- X 0 : Case (Last_X-X) Of`20
- X 1 : Case Screen`5BX,y`5D.Sym Of`20
- X 'l' : Y := Y + 1;
- X 'w' : Y := Y + 1;
- X 'k' : Y := Y - 1;
- X 't' : Y := Y + 1;
- X 'n' : Y := Y + 1;
- X 'u' : X := X - 1;
- X 'x' : X := X - 1;
- X end;
- X 0 : ;
- X -1 : Case Screen`5BX,y`5D.Sym Of`20
- X 't' : X := X + 1;
- X 'n' : Y := Y - 1;
- X 'u' : Y := Y - 1;
- X 'm' : Y := Y + 1;
- X 'v' : Y := Y - 1;
- X 'j' : Y := Y - 1;
- X 'x' : X := X + 1;
- X end;
- X end;
- X -1 : Case Screen`5BX,Y`5D.Sym Of`20
- X 'w' : X := X + 1;
- X 'k' : X := X + 1;
- X 'n' : X := X + 1;
- X 'u' : X := X + 1;
- X 'v' : Y := Y + 1;
- X 'j' : X := X - 1;
- X 'q' : Y := Y + 1;
- X end;
- X End `7B case `7D;
- X Last_X := Tmp_X;
- X LAst_Y := Tmp_Y;
- Xend `7B Move_Clockwise`7D;
- X
- XProcedure Move_Opp_Anti_Clockwise(Var X,Y,Last_X,Last_Y : Integer);
- X
- XVar Tmp_X,Tmp_Y : Integer;
- X
- XBegin
- XIf Screen`5BX,y`5D.Sym = 'n' Then Begin
- X Tmp_X := X;
- X Tmp_Y := Y;
- X Y := Y + (Y-Last_Y);
- X X := X + (X-Last_X);
- X Last_X := Tmp_X;
- X Last_Y := Tmp_Y;
- Xend Else
- X Move_Clockwise(X,Y,Last_X,Last_Y);
- Xend;
- X
- XProcedure Move_Opp_Clockwise(Var X,Y,Last_X,Last_Y : Integer);
- X
- XVar Tmp_X,Tmp_Y : Integer;
- X
- XBegin
- XIf Screen`5BX,y`5D.Sym = 'n' Then Begin
- X Tmp_X := X;
- X Tmp_Y := Y;
- X Y := Y + (Y-Last_Y);
- X X := X + (X-Last_X);
- X Last_X := Tmp_X;
- X Last_Y := Tmp_Y;
- Xend Else
- X Move_anti_Clockwise(X,Y,Last_X,Last_Y);
- Xend;
- X
- X
- X
- X
- XProcedure Move_Greeblys;
- X
- XVar Tmp : Integer;
- X
- XProcedure Jump_Greeb(Var Sudo_X,Sudo_Y,LSudo_X,LSudo_Y : Integer);
- X
- X
- X
- XBegin
- X Sudo_X := Snake_Head_X;
- X Sudo_Y := Snake_Head_Y;
- X While Not ( Screen`5BSudo_X,Sudo_Y`5D.Wall In `5BCreated,Inside`5D) Do`20
- X Sudo_X := Sudo_X - 1;
- X If Screen`5BSudo_X,Sudo_Y`5D.Wall = Created Then Begin
- X LSudo_X := Sudo_X;
- X LSudo_Y := Sudo_Y;
- X Case Screen`5BSudo_X,Sudo_Y`5D.Sym Of`20
- X 'm' , `20
- X 'v' ,
- X 'q' : Sudo_Y := Sudo_Y + 1;
- X 'j' : Sudo_X := Sudo_X - 1;
- X Otherwise Begin
- X LSudo_X := Sudo_X + 1;
- X LSudo_Y := Sudo_Y;
- X end
- X End `7B CAse `7D;
- X While Screen`5BSudo_X,Sudo_Y`5D.Wall = Created Do Begin
- X Move_Clockwise(Sudo_X,Sudo_Y,LSudo_X,LSudo_Y);
- X end;
- X end Else begin
- X LSudo_X := Sudo_X;
- X LSudo_Y := Sudo_Y;
- X Case Screen`5BSudo_X,Sudo_Y`5D.Sym Of`20
- X 'm' ,
- X 'v' ,
- X 'q' : Sudo_Y := Sudo_Y + 1;
- X 'j' : Sudo_X := Sudo_X - 1;
- X Otherwise Begin
- X LSudo_X := Sudo_X + 1;
- X LSudo_Y := Sudo_Y;
- X end
- X End `7B CAse `7D;
- X end;
- Xend;
- X
- X
- XBegin
- X`7BMove_Clockwise_wise_one`7D
- XPos(Clock_Greeb_X,Clock_Greeb_Y,Screen`5BClock_Greeb_X,Clock_Greeb_Y`5D.Sym)
- V;
- XIf Screen`5BClock_Greeb_X,Clock_Greeb_Y`5D.Wall = Inside Then Begin
- X If Screen`5BLast_Clock_Greeb_X,Last_Clock_Greeb_Y`5D.Wall = Outside Then
- V Begin
- X Marked_Clock_Greeb := False;
- X Move_Opp_Clockwise(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,Last
- V_Clock_Greeb_Y)
- X end Else Begin
- X If Marked_Clock_Greeb Then Begin
- X If Num_Marked_Clock_Greeb > 80 Then begin
- X Marked_Clock_Greeb := False;
- X Move_Clockwise(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,La
- Vst_Clock_Greeb_Y);
- X end else begin
- X`09 Num_Marked_Clock_Greeb := Num_Marked_Clock_Greeb + 1;
- X If ( Clock_Greeb_X = Marked_Clock_Greeb_X ) and ( Clock_Greeb_Y
- V = Marked_Clock_Greeb_Y ) Then Begin
- X Marked_Clock_Greeb := False;
- X Jump_Greeb(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,Las
- Vt_Clock_Greeb_Y)
- X end else`20
- X Move_Clockwise(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_
- VX,Last_Clock_Greeb_Y);
- X end`20
- X end else`20
- X Move_Clockwise(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,Last_
- VClock_Greeb_Y);
- X end
- Xend else
- X If Screen`5BClock_Greeb_X,Clock_Greeb_Y`5D.Wall = Created Then`20
- X Move_Opp_Clockwise(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,Last
- V_Clock_Greeb_Y)
- X Else Begin
- X If Marked_Clock_Greeb Then Begin
- X`09If ( Clock_Greeb_X = Marked_Clock_Greeb_X ) And ( Clock_Greeb_Y = Marked_
- VClock_Greeb_Y) Then Begin
- X Marked_Clock_Greeb := False;
- X Jump_Greeb(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,Last_C
- Vlock_Greeb_Y)
- X end else
- X Move_Clockwise(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,La
- Vst_Clock_Greeb_Y)
- X End Else
- X Move_Clockwise(Clock_Greeb_X,Clock_Greeb_Y,Last_Clock_Greeb_X,Last_
- VClock_Greeb_Y);
- X end;
- XPos(Clock_Greeb_X,Clock_Greeb_Y,'*');
- XIf (You_X=Clock_Greeb_X) and (You_Y=Clock_Greeb_Y) Then`20
- X Died := True;
- X`7BMove AntiClockwise One `7D
- XPos(Anti_Greeb_X,Anti_Greeb_Y,Screen`5BAnti_Greeb_X,Anti_Greeb_Y`5D.Sym);
- XIf Screen`5BAnti_Greeb_X,Anti_Greeb_Y`5D.Wall = Inside Then Begin
- X If Screen`5BLast_Anti_Greeb_X,Last_Anti_Greeb_Y`5D.Wall = Outside Then Be
- Vgin
- X Marked_Anti_Greeb := False;
- X Move_Opp_Anti_Clockwise(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,La
- Vst_Anti_Greeb_Y)
- X End Else`20
- X If Marked_Anti_Greeb Then Begin
- X If Num_Marked_Anti_Greeb > 80 Then begin
- X Marked_Anti_Greeb := False;
- X Move_Anti_Clockwise(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,
- VLast_Anti_Greeb_Y)
- X end else begin
- X`09 Num_Marked_Anti_Greeb := Num_Marked_Anti_Greeb + 1;
- X If ( Anti_Greeb_X = Marked_Anti_Greeb_X ) and ( Anti_Greeb_Y = M
- Varked_Anti_Greeb_Y ) Then Begin
- X Marked_Anti_Greeb := False;
- X Jump_Greeb(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,Last_A
- Vnti_Greeb_Y);
- X Tmp := Anti_Greeb_X;
- X Anti_Greeb_X := Last_Anti_Greeb_X;
- X Last_Anti_Greeb_X := Tmp;
- X Tmp := Anti_Greeb_Y;
- X Anti_Greeb_Y := Last_Anti_Greeb_Y;
- X Last_Anti_Greeb_Y := Tmp;
- X end else`20
- X Move_Anti_Clockwise(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb
- V_X,Last_Anti_Greeb_Y)
- X end`20
- X end else`20
- X Move_Anti_Clockwise(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,Las
- Vt_Anti_Greeb_Y)
- Xend else
- X If Screen`5BAnti_Greeb_X,Anti_Greeb_Y`5D.Wall = Created Then`20
- X Move_Opp_Anti_Clockwise(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,La
- Vst_Anti_Greeb_Y)
- X Else Begin
- X If Marked_Anti_Greeb Then Begin
- X`09If ( Anti_Greeb_X = Marked_Anti_Greeb_X ) And ( Anti_Greeb_Y = Marked_Ant
- Vi_Greeb_Y) Then Begin
- X Marked_Anti_Greeb := False;
- X Jump_Greeb(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,Last_Anti
- V_Greeb_Y);
- X Tmp := Anti_Greeb_X;
- X Anti_Greeb_X := Last_Anti_Greeb_X;
- X Last_Anti_Greeb_X := Tmp;
- X Tmp := Anti_Greeb_Y;
- X Anti_Greeb_Y := Last_Anti_Greeb_Y;
- X Last_Anti_Greeb_Y := Tmp;
- X end else
- X Move_Anti_Clockwise(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,
- VLast_Anti_Greeb_Y);
- X End Else`20
- X Move_Anti_Clockwise(Anti_Greeb_X,Anti_Greeb_Y,Last_Anti_Greeb_X,Las
- Vt_Anti_Greeb_Y);
- X end;
- XPos(Anti_Greeb_X,Anti_Greeb_Y,'*');
- XIf (You_X=Anti_Greeb_X) and (You_Y=Anti_Greeb_Y) Then`20
- X Died := True;
- XIf Moving_Extra_Greebly Then Begin
- X Pos(Extra_Greeb_X,Extra_Greeb_Y,Screen`5BExtra_Greeb_X,Extra_Greeb_Y`5D.S
- Vym);
- X If Dir_When_Start_Creat = Clockwise Then`20
- X Move_ClockWise(Extra_Greeb_X,Extra_Greeb_Y,Last_Extra_Greeb_X,Last_Ext
- Vra_Greeb_Y)
- X Else
- X Move_Anti_ClockWise(Extra_Greeb_X,Extra_Greeb_Y,Last_Extra_Greeb_X,Las
- Vt_Extra_Greeb_Y);
- X Pos(Extra_Greeb_X,Extra_Greeb_Y,'*');
- X If (You_X=Extra_Greeb_X) And (You_Y =Extra_Greeb_Y) Then
- X Died := True
- X Else begin
- X Pos(Extra_Greeb_X,Extra_Greeb_Y,Screen`5BExtra_Greeb_X,Extra_Greeb_Y`5
- VD.Sym);
- X If Dir_When_Start_Creat = Clockwise Then`20
- X Move_ClockWise(Extra_Greeb_X,Extra_Greeb_Y,Last_Extra_Greeb_X,Last_
- VExtra_Greeb_Y)
- X Else
- X Move_Anti_ClockWise(Extra_Greeb_X,Extra_Greeb_Y,Last_Extra_Greeb_X,
- VLast_Extra_Greeb_Y);
- X Pos(Extra_Greeb_X,Extra_Greeb_Y,'*');
- X If (You_X=Extra_Greeb_X) And (You_Y =Extra_Greeb_Y) Then`20
- X Died := True;
- X end;
- Xend;
- Xend;
- X
- X
- X
- XProcedure Move_Snake;
- X
- XVar tmp,cnt: Integer;
- X Save_ch : Char;
- X Swaped_head : Boolean;
- X Dist_From_Head,
- X Dist_From_Tail : Integer;
- X
- XProcedure Get_Move_For_Snake ;
- X
- X
- XProcedure Swap_snake_head_and_Tail;
- X
- XVar Tmp_Tail_X,Tmp_Tail_Y : Integer;
- X
- Xbegin
- X Swaped_Head := True;
- X Moves_since_stuck := 0;
- X Snake_Got_stuck := False;
- X Tmp_Tail_X := Snake_Tail_X;
- X Tmp_Tail_Y := Snake_Tail_Y;
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Wall := Other;
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Sym := Blank;
- X pos(Snake_Head_X,Snake_Head_Y,Blank);
- X If ( Screen`5BSnake_Head_X,Snake_Head_Y+1`5D.Wall = Snake ) and`20
- X ( Screen`5BSnake_Head_X,Snake_Head_Y+1`5D.Sym in `5B'q','k','j'`5D ) T
- Vhen begin
- X Snake_Tail_X := Snake_Head_X;
- X Snake_Tail_Y := Snake_Head_Y+1;
- X end else
- X If ( Screen`5BSnake_Head_X,Snake_Head_Y-1`5D.Wall = Snake ) and`20
- X ( Screen`5BSnake_Head_X,Snake_Head_Y-1`5D.Sym in `5B'q','l','m'`5D
- V ) Then begin
- X Snake_Tail_X := Snake_Head_X;
- X Snake_Tail_Y := Snake_Head_Y-1;
- X end else
- X If ( Screen`5BSnake_Head_X+1,Snake_Head_Y`5D.Wall = Snake ) and`20
- X ( Screen`5BSnake_Head_X+1,Snake_Head_Y`5D.Sym in `5B'x','m','j'`
- V5D ) Then begin
- X Snake_Tail_X := Snake_Head_X+1;
- X Snake_Tail_Y := Snake_Head_Y;
- X end else
- X If ( Screen`5BSnake_Head_X-1,Snake_Head_Y`5D.Wall = Snake ) and`
- V20
- X ( Screen`5BSnake_Head_X-1,Snake_Head_Y`5D.Sym in `5B'x','l','
- Vk'`5D ) Then begin
- X Snake_Tail_X := Snake_Head_X-1;
- X Snake_Tail_Y := Snake_Head_Y;
- X end;
- X Snake_Head_X := Tmp_Tail_X;
- X Snake_Head_Y := Tmp_Tail_Y;
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Sym := Blank;
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Wall := Snake;
- X pos(Snake_Head_X,Snake_Head_Y,Qix_Head);
- X Len_Snake := Len_Snake - 1;
- Xend;
- X
- X
- XFunction Sgn(X:Integer):Integer;
- X
- XBegin
- X If X > 0 Then`20
- X Sgn := 1
- X else
- X If X < 0 Then`20
- X Sgn := -1
- X Else`20
- X Sgn := 0;
- Xend;
- X
- XProcedure Search_For_Move;
- X
- XVar X,Y,XX,YY,Dist,Closest : Integer;
- X
- XBegin
- X Num_Snake_Searched := Num_Snake_Searched + 1;
- X Snake_Move_X := 0;
- X Snake_Move_Y := 0;
- X X := 0;
- X Y := 0;
- X
- X Closest := 999999;
- X For Xx := 1 To 4 do begin
- X Case Xx of`20
- X 1 : Y := 1;
- X 2 : Y := -1;
- X 3 : Begin
- X Y := 0;
- X X := 1;
- X end;
- X 4 : X := -1 ;
- X end;
- X Dist := (((Snake_Head_X + X ) - Snake_After_X))**2`20
- X + ((Snake_Head_Y + Y ) - Snake_After_Y)**2;
- X If Dist < Closest Then`20
- X If (( X + Y ) <> 0 ) and`20
- X ( Screen`5BSnake_Head_X+X,Snake_Head_Y+Y`5D.wall in `5BCreated,O
- Vther`5D ) and`20
- X ( Not (( Snake_Head_X+X = Start_Creat_X ) and ( Snake_Head_Y+Y =
- V Start_Creat_Y))) Then Begin
- X Snake_Move_X := X;
- X Snake_Move_Y := Y;
- X Closest := Dist;
- X end;
- X end;
- Xend;
- X
- X
- X
- X
- X
- XBegin
- X If Creating_wall Then begin
- X If ( Num_Snake_Searched > ( 10 + Rand(10))) And
- X ( Moves_Since_stuck > 15 ) Then Begin
- X Num_Snake_Searched := 0; `20
- X Swap_Snake_Head_and_Tail;
- X Snake_After_X := You_X;
- X Snake_After_Y := You_Y;
- X end else begin
- X Dist_from_Tail := (( Snake_Tail_X - Snake_After_X )**2 )+`20
- X (( Snake_Head_Y - Snake_After_Y )**2 );
- X If (( Snake_Head_X - Snake_After_X )**2 +`20
- X ( Snake_Head_Y - Snake_After_Y )**2 ) > ( Dist_From_Tail*2 ) The
- Vn`20
- X If ( Moves_since_Stuck > 10 ) and ( Len_snake > 10 ) and
- X ( dist_from_tail > 10 ) Then`20
- X Swap_Snake_Head_and_Tail;
- X If (( You_X - Snake_Head_X ) ** 2 + ( You_Y - Snake_Head_Y)**2 ) <
- X (( Snake_Head_X - Snake_After_X )**2 + ( Snake_Head_Y - Snake_Af
- Vter_Y )**2 ) Then Begin
- X Num_Snake_Searched := 0;
- X Snake_After_X := You_X;
- X Snake_After_Y := You_Y;
- X end;
- X end;
- X end Else begin
- X Num_Snake_Searched := 0;
- X If Num_MOves_After_This_Pt > ( 10 + Rand(10)) Then Begin
- X Snake_After_X := Rand(21);
- X Snake_After_Y := Rand(78);
- X Num_Moves_After_This_Pt := 0;
- X end else
- X Num_Moves_After_This_Pt := Num_Moves_After_This_Pt + 1;
- X end;
- X If Not Snake_Got_Stuck Then Begin
- X Snake_Move_X := 0;
- X Snake_Move_Y := 0;
- X If Rand(4) = 1 then Begin
- X Snake_Move_X := Sgn(Snake_After_X - Snake_Head_X);
- X If Snake_Move_X = 0 Then`20
- X Snake_Move_Y := Sgn(Snake_After_Y - Snake_Head_Y);
- X end else begin
- X Snake_Move_Y := Sgn(Snake_After_Y - Snake_Head_Y);
- X If Snake_Move_Y = 0 Then`20
- X Snake_Move_X := Sgn(Snake_After_X - Snake_Head_X);
- X end;
- X If (( Snake_Move_X + Snake_Move_Y ) = 0 ) or`20
- X ( Not ( Screen`5BSnake_Head_X+Snake_Move_X,Snake_Head_Y+Snake_Move_
- VY`5D.wall in `5BCreated,Other`5D )) or`20
- +-+-+-+-+-+-+-+- END OF PART 2 +-+-+-+-+-+-+-+-
-
-
- __________
- Darin Reid
- Internet: Areid@Mary.Fordham.Edu
- Bitnet: Areid@Fordmulc
- Phone: (212) 749-8187
-